package ru.susu.algebra.matrix;

import ru.susu.algebra.transformers.IObjectTransformer;

/**
 * Преобразует матрицу. В результат не попадут строки, в которых все значения null.
 *
 * @author akargapolov
 * @since: 03.05.2010
 */
public class RemoveNullLinesMatrixTransformer implements IObjectTransformer<Matrix>
{

	/**
	 * Преобразует матрицу. В результат не попадут строки, в которых все значения null.
	 * @param matrix исходная матрица
	 * @return результат преобразования, матрица без null строк
	 */
	@Override
	public Matrix transformObject(Matrix matrix)
	{
		Matrix result = new Matrix(0, matrix.getCols());
		for (int row = 0;row < matrix.getRows();row++)
		{
			if (!isNullRow(matrix, row))
			{
				result.addRow(matrix.getRow(row));
			}
			else
			{
				System.out.println(row + " line removed");
			}
		}
		return result;
	}

	/**
	 * Проверка значений строки на null
	 * @param m матрица
	 * @param row номер строки
	 * @return true, если все значения в данной строке null
	 */
	protected boolean isNullRow(Matrix m, int row)
	{
		for (int col = 0;col<m.getCols();col++)
		{
			if (m.getValue(row, col) != null)
			{
				return false;
			}
		}
		return true;
	}

}
